// 版权所有2011 Go作者。版权所有。
// 此源代码的使用受BSD样式
// 许可证的约束，该许可证可以在许可证文件中找到。

package cgo

import "unsafe"

// 这些实用程序函数可以从代码
// 通过交叉调用2从gcc编译而来。

// 交叉调用2的声明为：
// 无效交叉调用2（void（*fn）（void*），void*，int）；
// 
// 我们需要导出符号crosscall2以支持
// 来自共享库的回调。无论
// 链接模式如何，这都适用。
// 
// 兼容性说明：SWIG只在一种情况下使用交叉调用2:
// 使用以下模式调用_cgo_panic。我们需要保持
// 这种模式有效。特别是，crosscall2实际上需要四个
// 参数，但当
// 调用_cgo_panic时，可以使用三个参数调用它。
// go:cgo\U导出\u静态交叉调用2 
// go:cgo\U导出\u动态交叉调用2 

// 。参数被转换为Go字符串。

// 在用gcc编译的代码中这样调用：
// struct{const char*p；}a；
// a.p=/*要传递给panic的字符串*/；
// 交叉调用2（_cgo_panic，&a，sizeof a）；
// *函数调用将不会返回。*/

// TODO:我们应该将一个常规C函数导出为panic，将SWIG 
// 更改为使用该函数而不是上述模式，然后我们可以从crosscall2中删除
// 向后兼容性并停止导出它。go:linkname\uCGO\uPanic\uInternal runtime\uCGO\uPanic\uInternal\uCGEFG

func _runtime_cgo_panic_internal(p *byte)

func _cgo_panic(a *struct{ cstr *byte }) {
	_runtime_cgo_panic_internal(a.cstr)
}

var x_cgo_init byte
var _cgo_init = &x_cgo_init

// go:cgo\u导入\u静态x\u cgo\u线程\u启动
// go:linkname x\u cgo\u线程\u启动x\u cgo\u线程\u启动
// go:linkname\u cgo\u线程\u启动
var x_cgo_thread_start byte
var _cgo_thread_start = &x_cgo_thread_start

// 在不更新任何go状态的情况下创建新系统线程。
// 
// 此方法在加载共享库期间调用，以创建新的OS 
// 线程来执行运行时初始化。此方法与
// /\u cgo\u系统线程\u start类似，只是它不更新任何Go状态。

// go:cgo\u import\u static x\u cgo\u sys\u thread\u create 
// go:linkname x\u cgo\u sys\u thread\u create x\u cgo\u sys\u thread\u create 
var x_cgo_sys_thread_create byte
var _cgo_sys_thread_create = &x_cgo_sys_thread_create

// 
// 我们目前在每个CGO入口点（通过_CGO_wait_runtime_init_done）进行阻塞
// 以确保在执行CGO调用之前已初始化运行时
// 执行。这对于共享库来说是必要的，在共享库中，我们在一个单独的线程中启动运行时
// 初始化并返回，而不用等待这个
// 线程完成初始化。

// go:cgo\u导入\u静态x\u cgo\u通知\u运行时\u初始化\u完成
// go:linkname x\u cgo\u通知\u运行时\u初始化\u完成x\u cgo\u通知\u运行时\u初始化\u完成
// go go:linkname \u cgo\u通知\u运行时\u初始化\u完成\u cgo\u通知\u运行时\u初始化\u完成
var x_cgo_notify_runtime_init_done byte
var _cgo_notify_runtime_init_done = &x_cgo_notify_runtime_init_done

// 设置回溯上下文函数。请参阅runtime.SetCgoTraceback。

// go:cgo\u import\u static x\u cgo\u set\u context\u函数
// go:linkname x\u cgo\u set\u context\u函数x\u cgo\u set\u context\u函数
// go:linkname\u cgo\u set\u context\u函数
var x_cgo_set_context_function byte
var _cgo_set_context_function = &x_cgo_set_context_function

// 调用libc函数来执行通过libc 
// 拦截器注入的后台工作，例如在线程
// sanitizer下处理挂起的信号。
// 
// 如果不需要libc拦截器，则作为零指针保留。go:cgo\U导入(静态)cgo\U收益(静态)go:linkname(动态)(动态)(动态)cgo\U导出(静态)cgo\U拓扑(静态)cgo\U拓扑(拓扑)(动态)cgo\U拓扑)拓扑)

var _cgo_yield unsafe.Pointer

